<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            position: absolute;
            left: 0;
            top: 50px;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <button class="btn1">点击走到500</button>
    <button class="btn2">点击退到300</button>
    <script>
        //回调函数原理：函数可以作为一个参数。将这个函数作为参数传到另一个函数里面
        //当那个函数执行完之后，再执行传进去的这个函数，这个过程就叫做回调
        //例如当下面的缓动动画执行完成后再将盒子的颜色变成红色
        var box = document.querySelector('div');
        var btn1 = document.querySelector('.btn1');
        var btn2 = document.querySelector('.btn2');
        function animate(obj,target,callback){
            //callback = function(){} 调用的时候 就再定时器结束的时候调用callback();
            clearInterval(obj.timer);
            obj.timer  = setInterval(function(){
                //每次加1 ， 这个步长值改为一个慢慢变小的值
                //步长公式：(目标值-现在的位置)
                //把步长值改为整数 往上取整 
                // var step = Math.ceil((target - obj.offsetLeft)/10);
                //为了判断是取正的整数值，还是取负的整数zhi
                var step =  (target - obj.offsetLeft)/10;
                if(step >= 0){
                    step = Math.ceil(step);
                }else{
                    step = Math.floor(step);
                }
                if(obj.offsetLeft == target){
                    clearInterval(obj.timer);
                    //回调函数下入定时器结束里面
                    if(callback){
                        callback();
                    }
                }
                obj.style.left = obj.offsetLeft + step + 'px';
            },15)
        }

        btn1.addEventListener('click',function(){
            animate(box,500,function(){box.style.backgroundColor = 'red';});
        })
        btn2.addEventListener('click',function(){
            animate(box,300);
        })
        
    </script>
</body>
</html>